package cn.iocoder.yudao.module.system.service.college;

import cn.iocoder.yudao.module.system.controller.admin.gugu.gugu.CollegeInfo;
import cn.iocoder.yudao.module.system.dal.dataobject.college.CollegeDO;

import java.util.List;
import java.util.Map;

/**
 * 高校基础信息 Service 接口
 *
 * @author 芋道源码
 */
public interface CollegeService {

    /**
     * 保存高校基础信息列表
     *
     * @param collegeInfoList 高校基础信息列表
     * @return 保存成功的数量
     */
    int saveCollegeInfoList(List<CollegeInfo> collegeInfoList);

    /**
     * 根据高校名称查询高校信息
     *
     * @param collegeName 高校名称
     * @return 高校信息
     */
    CollegeDO getCollegeByName(String collegeName);

    /**
     * 根据高校UUID查询高校信息
     *
     * @param schoolUuid 高校UUID
     * @return 高校信息
     */
    CollegeDO getCollegeBySchoolUuid(String schoolUuid);

    /**
     * 根据数据ID查询高校信息
     *
     * @param dataId 数据ID
     * @return 高校信息
     */
    CollegeDO getCollegeByDataId(String dataId);

    /**
     * 根据省份查询高校信息列表
     *
     * @param province 省份
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListByProvince(String province);

    /**
     * 根据高校类型查询高校信息列表
     *
     * @param collegeType 高校类型
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListByType(String collegeType);

    /**
     * 根据985/211/双一流标识查询高校信息列表
     *
     * @param is985 是否985
     * @param is211 是否211
     * @param isDualClass 是否双一流
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListBySpecialType(Boolean is985, Boolean is211, Boolean isDualClass);

    /**
     * 根据高校名称模糊查询高校信息列表
     *
     * @param collegeName 高校名称关键字
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListByNameLike(String collegeName);

    /**
     * 根据省份和城市查询高校信息列表
     *
     * @param province 省份
     * @param city 城市
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListByProvinceAndCity(String province, String city);

    /**
     * 批量根据schoolUuid查询高校信息
     *
     * @param schoolUuids 高校UUID列表
     * @return 高校信息列表
     */
    List<CollegeDO> getCollegeListBySchoolUuids(List<String> schoolUuids);

    /**
     * 查询所有有效的高校信息
     *
     * @return 高校信息列表
     */
    List<CollegeDO> getAllValidColleges();

    /**
     * 批量导入高校基础信息数据
     * 循环全国所有省份获取数据
     *
     * @param pageSize 每页大小
     * @return 导入结果统计
     */
    Map<String, Object> batchImportCollegeData(Integer pageSize);

    /**
     * 从API获取并保存高校基础信息
     *
     * @param keywords 搜索关键字
     * @param pageIndex 页码
     * @param pageSize 每页大小
     * @return 保存的数据条数
     */
    int importCollegeDataFromApi(String keywords, Integer pageIndex, Integer pageSize);

}
